//package com.maduar.mybatis.demo.config;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.maduar.mybatis.demo.util.CusAccessObjectUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestAttributes;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import javax.servlet.http.HttpServletRequest;
//
///**
// * Description: 日志拦截器，打印controller层的入参和出参
// *
// * @author danny.pang danny.pang@ebizprise.com
// * @version 1.1.1 2019-02-28
// *
// */
////@Aspect
////@Component
//@Slf4j
//public class ControllerAspect {
//
//    /**
//     * Controller aspect.
//     */
//    @Pointcut("execution(* com.maduar.mybatis.demo.controller..*.*(..))")
//    public void controllerAspect() {
//    }
//
//    @Around(value = "controllerAspect()")
//    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
//
//        // 修复验证码不出现
//        final String capCha = "genCaptcha";
//        String signatureName = pjp.getSignature().getName();
//
//        if (capCha.equals(signatureName)) {
//            return pjp.proceed();
//        }
//
//        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
//        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
//        //防止不是http请求的方法，例如：scheduled
//        if (ra == null || sra == null) {
//            return pjp.proceed();
//        }
//        HttpServletRequest request = sra.getRequest();
//
//        String CLASS_METHOD = pjp.getSignature().getDeclaringTypeName() + "." + signatureName;
//        Object responseStr = null;
//
//        long startTime = System.currentTimeMillis();
//
//        try {
//            responseStr  = pjp.proceed();
//            // 3.出参打印
//            return responseStr;
//        } catch (Throwable e) {
//
//            throw e;
//        } finally {
//            long endTime = System.currentTimeMillis();
//
//            Object[] argsArray = pjp.getArgs();
//            String args = argsArray == null || argsArray.length == 0
//                    ? JSON.toJSONString("")
//                    : JSONArray.toJSONString(argsArray);
//
//            log.warn("{ \"URL\": \"{}\", \"HTTP_METHOD\": \"{}\", \"IP\": \"{}\", \"CLASS_METHOD\": \"{}\", \"REQUEST_ARGS\": {}, \"RESPONSE\": {}, \"SPEND_TIME\": \"{}\"}",
//                    request.getRequestURL().toString(),
//                    request.getMethod(),
//                    CusAccessObjectUtil.getIpAddress(request),
//                    CLASS_METHOD,
//                    args,
//                    responseStr != null ? JSON.toJSON(responseStr) : "",
//                    (endTime - startTime)
//            );
//        }
//    }
//}
